<HTML>

<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=iso-8859-1">
<TITLE>SQuirreL SQL Client Help</TITLE>
<LINK REL="stylesheet" TYPE="text/css" href="style.css"
	title="SQuirreL SQL Client Stylesheet">
</HEAD>

<BODY>

<TABLE>
	<TR>
		<TD WIDTH="310"><IMG SRC="images/logo_1.jpg" WIDTH="302"
			HEIGHT="99" BORDER="0" ALT="SQuirreL SQL Client Logo"></TD>
		<TD ALIGN="left">
		<H1>SQL Client Help File</H1>
		</TD>
	</TR>
</TABLE>

<TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0">
	<TR>
		<TD><B>Contents</B></TD>
	</TR>
	<TR>
		<TD><A HREF="#introduction">Introduction</A></TD>
	</TR>
	<TR>
		<TD><A HREF="#installation">Installation</A></TD>
	</TR>
	<TR>
		<TD><A HREF="#cmd_line_options">Command Line Options</A></TD>
	</TR>
	<TR>
		<TD><A HREF="#howtoconnect">How to Connect to a Database</A></TD>
	</TR>
	<TR>
		<TD>&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="#the_driver">The Driver</A></TD>
	</TR>
	<TR>
		<TD>&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="#the_alias">The Alias</A></TD>
	</TR>
	<TR>
		<TD>&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="#connecting">Connecting</A></TD>
	</TR>
	<TR>
		<TD><A HREF="#executing">Executing SQL</A></TD>
	</TR>
	<TR>
		<TD>&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="#editing_sql">Editing
		the SQL Results</A></TD>
	</TR>
	<TR>
		<TD><A HREF="#ContentsTab">The Contents Tab and Editing Data</A></TD>
	</TR>
	<TR>
		<TD>&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="#ViewingDataInContentsTab">Viewing
		Data in the Contents Tab</A></TD>
	</TR>
	<TR>
		<TD>&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="#enablingediting">Enabling
		Editing</A></TD>
	</TR>
	<TR>
		<TD>&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="#Setting_the_Editing_Mode">Setting
		the Format and Editing Mode</A></TD>
	</TR>

	<TR>
		<TD>&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="#howtoedit">How To Edit</A></TD>
	</TR>
	<TR>
		<TD>&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="#insert_delete">Inserting
		and Deleting Rows</A></TD>
	</TR>
	<TR>
		<TD>&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="#UsingPopup">Using the
		Popup Window</A></TD>
	</TR>
	<TR>
		<TD>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<A
			HREF="#EditingInPopup">Editing Within the Popup</A></TD>
	</TR>
	<TR>
		<TD>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<A
			HREF="#ImportExport">Import, Export and Editing with an External
		Command</A></TD>
	</TR>
	<TR>
		<TD>&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="#Limitations">Limitations</A></TD>
	</TR>
	<TR>
		<TD>&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="#summary_of_how_it_works">Summary
		of How it works (and why you may care)</A></TD>
	</TR>
	<TR>
		<TD>&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="#quirks">Quirks,
		Oddities and Known Bugs and work-arounds</A></TD>
	</TR>
	<TR>
		<TD><A HREF="#data_types">Data Types</A></TD>
	</TR>
	<TR>
		<TD><A HREF="#printing">Printing</A></TD>
	</TR>
	<TR>
		<TD><A HREF="#global_prefs">Global Preferences</A></TD>
	</TR>
	<TR>
		<TD><A HREF="#session_props">New Session and Session
		Properties</A></TD>
	</TR>
	<TR>
		<TD><A HREF="#plugins">Plugins</A></TD>
	</TR>
	<TR>
		<TD><A HREF="#logs">Logs</A></TD>
	</TR>
	<TR>
		<TD><A HREF="#menus">Menus</A></TD>
	</TR>
	<TR>
		<TD>&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="#file_menu">File Menu</A></TD>
	</TR>
	<TR>
		<TD>&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="#drivers_menu">Drivers
		Menu</A></TD>
	</TR>
	<TR>
		<TD>&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="#aliases_menu">Aliases
		Menu</A></TD>
	</TR>
	<TR>
		<TD>&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="#plugins_menu">Plugins
		Menu</A></TD>
	</TR>
	<TR>
		<TD>&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="#session_menu">Session
		Menu</A></TD>
	</TR>
	<TR>
		<TD>&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="#windows_menu">Windows
		Menu</A></TD>
	</TR>
	<TR>
		<TD>&nbsp;&nbsp;&nbsp;&nbsp;<A HREF="#help_menu">Help Menu</A></TD>
	</TR>
</TABLE>

<BR>

<A NAME="introduction">
<H2>Introduction</H2>
</A>

<p>SQuirreL SQL Client is a graphical Java program that will allow
you to view the structure of a JDBC compliant database, browse the data
in tables, issue SQL commands etc. You need to be running at least
version 1.5 of Java for SQuirreL version 2.4 and higher. See the <a
	href="http://squirrel-sql.sf.net/index.php?page=old">Old Versions</a>
page for SQuirreL downloads that will work with older versions of Java.</P>

<P>It is free software, and you are welcome to redistribute it under
the terms of the <A HREF="licences/squirrel_licence.txt">GNU Lesser
General Public License</A>.</P>

<A NAME="installation">
<H2>Installation</H2>
</A>

<P>The installer has been created using the <a
	href="http://www.izforge.com/izpack/">IzPack Java Installer</a>. <a
	href="http://sourceforge.net/project/showfiles.php?group_id=28383">Download</A>
the file <TT>squirrel-sql-&lt;version&gt;-install.jar</TT> and execute
it with the command:</P>

<PRE>
java -jar squirrel-sql-&lt;version&gt;-install.jar
</PRE>

<P>On some operating systems (currently Windows NT, 2000 and XP) a
shortcut will be created in the menu system. For Windows the file <TT>squirrel-sql.bat</TT>
will run the application. For Unix the file is <TT>squirrel-sql.sh</TT>.
The <TT>squirrel-sql.jar</TT> file is executable so on those operating
systems that support it you can run SQuirrel by double clicking <TT>squirrel-sql.jar</TT>.
You can also run it by issuing the following command:</P>

<PRE>
java -jar squirrel-sql.jar
</PRE>

<P>Just remember that when executing the jar file directly you don't
use your current class path ($CLASSPATH on Unix or %CLASSPATH% on
Windows) so if you have your JDBC drivers in your class path then
SQuirreL won't see them. See <A HREF="#the_driver">The Driver</A> for
more information.</P>

<P>Some people have reported core dumps with the Sun JDK1.3.1
running under Linux. If this happens passing the -classic flag to the
java executable appears to fix the problem. No similar problems have
been reported with any other JDK on Linux.</P>

<A NAME="cmd_line_options">
<H2>Command Line Options</H2>
</A>

<P>The behaviour of SQuirreL can be changed by passing various
arguments to it.</P>

<PRE>
squirrel-sql.sh [options]
or
squirrel-sql.bat [options]

Options:
 -userdir,--user-settings-dir &lt;userdir&gt;   User settings directory
 -l,--log-config-file &lt;config-file&gt;       Logging configuration file
 -home,--squirrel-home &lt;home&gt;             SQuirreL home directory
 -n,--native-laf                          Use native look and feel
 -nop,--no-plugins                        Don't load plugins
 -nos,--no-splash                         Don't display splash screen
 -m,--use-default-metal-theme             Use default metal theme
 -h,--help                                Display Help and exit
</pre>

<P><TT>-userdir</TT> specifies where SQuirreL stores its <em>per-user</em>
settings such as application preferences etc. This defaults to <tt>&lt;home&gt;/squirrel-sql</tt>.</P>

<P><TT>-home</TT> specifies the directory that SQuirreL was
installed into. It is setup during the installation process. You should
never need to change this argument.</P>

<A NAME="howtoconnect">
<H2>How to Connect to a Database</H2>
</A>

There are two pieces of information you need to supply to connect to a
database; the driver definition and the alias. The driver definition
specifies the JDBC driver to use and the alias specifies the connection
parameters.

<A NAME="the_driver">
<H3>The Driver</H3>
</A>

<P>A number of default driver definitions ship with SQuirreL. These
are added to the Drivers List window (<EM>View Drivers</EM> option on
the <EM>Windows</EM> menu) when you first start up SQuirreL.</P>

<P ALIGN="CENTER"><IMG SRC="images/drivers_tool_window_1.png"
	BORDER="0" ALT="Drivers List Window"></P>

<P>The <IMG ALIGN="CENTER" SRC="images/ok_st_obj.gif" BORDER="0"
	ALT="Blue Tick"> icon next to a driver definition indicates that
it has been successfully loaded while the <IMG ALIGN="CENTER"
	SRC="images/error_st_obj.gif" BORDER="0" ALT="Cross"> icon
indicates that the JDBC driver could not be loaded and so cannot be used
to connect to a database.</P>

<P>All of the default driver definitions assume that the JDBC driver
classes are in the current class path or in your JRE extensions
directory (consult the documentation for your Java implementation for
more information on this). If this is not the case you will need to
modify the driver definition to point to the jar file or the classes
directory that contains these classes.
<P>You can create new driver definitions using the <EM>New
Driver</EM> option on the <EM>Drivers</EM> menu.</P>

<P ALIGN="CENTER"><IMG SRC="images/chg_driver_1.png" BORDER="0"
	ALT="Change Driver dialog (Java Class Path tab)"></P>

<P>This is an example of a driver definition. This dialog can be
displayed by selecting a driver definition in the Drivers List window
and then selecting the <EM>Modify Driver</EM> option from the <EM>Drivers</EM>
menu.
<P>The <EM>Name</EM> text field specifies an easy to remember name
for the database driver definition and is the text shown in the Drivers
List window.</P>

<P>The <EM>Example URL</EM> shows an example URL for this driver.
This can be found in the documentation that comes with the driver. This
is only an example URL, the actual URL is defined in the alias.</P>

<P>The entries in the <EM>Java Class path</EM> tab show the
directories and jars in the current class path. Pressing the <EM>List
Drivers</EM> button will place the class names of all the JDBC drivers found
in the class path into the <EM>Class Name</EM> dropdown control.
<P>The <EM>Class Name</EM> specifies the class name of the JDBC
driver. Either select an existing entry in the dropdown or key in the
class name of the JDBC driver (it can normally be found in the
documentation that comes with the driver).
<P>The <EM>Extra Class Path</EM> tab allows you to select a JDBC
driver that is in a jar file or a directory that is not in the current
class path.
<P ALIGN="CENTER"><IMG SRC="images/chg_driver_2.png" BORDER="0"
	ALT="Change Driver dialog (Extra Class Path tab)"></P>

<P>The <EM>Add</EM> button will display a File Open dialog allowing
you to select one or more jar files or directories. The <EM>Delete</EM>
button allows you to remove a jar file or directory from the list. The <EM>Up</EM>
and <EM>Down</EM> buttons allow you to change the sequence of the
entries. The <EM>List Drivers</EM> button will place the class names of
all the JDBC drivers into the <EM>Class Name</EM> dropdown.</P>

<P>Press the <EM>OK</EM> button to save the driver definition and
close the window or the <EM>Close</EM> button to close the window
without saving any changes.</P>

<A NAME="the_alias">
<H3>The Alias</H3>
</A>

<P>Now you need to create an alias to your database.</P>

<P>Display the Aliases List window (<EM>View Aliases</EM> option on
the <EM>Windows</EM> menu). When you run SQuirreL for the first time
this window will be empty.</P>

<P ALIGN="CENTER"><IMG SRC="images/aliases_tool_window_1.png"
	BORDER="0" ALT="Aliases List Window">
<P>Take the <EM>New Alias</EM> option from the <EM>Aliases</EM> menu
and the following dialog will be displayed.</P>

<P ALIGN="CENTER"><IMG SRC="images/add_alias_1.png" BORDER="0"
	ALT="Add
New Alias Window"></P>

<P>Enter an easy to remember name in the <EM>Name</EM> field for
this database URL. This is the text that will be displayed in the
Aliases List Window.</P>

<P>Select the driver for this alias from the <EM>Driver</EM>
dropdown or click on the <EM>New</EM> button to create a new driver
definition.</P>

<P>Change the <EM>URL</EM> to point to your database.</P>

<P>Optionally enter a user name if you want the alias to default to
a specific user.</P>

<P>The <EM>Test</EM> button will allow you to attempt to connect to
your alias to ensure that the parameters you have entered are correct.</P>

<P>Press the <EM>OK</EM> button to save the alias definition and
close the window or the <EM>Close</EM> button to close the window
without saving any changes.</P>

<p>The <EM>Properties</EM> button 
( <IMG ALIGN="CENTER" VALIGN="CENTER"
	   SRC="images/alias_properties_button.png" BORDER="0"
	   ALT="Properties Button"> ) 
in the alias dialog window allows you to configure alias properties such
as which schemas to load into the Object Tree.  This is will reduce the time 
that it takes to populate the Object Tree after connecting/refreshing for
databases like Oracle.  There are three types of objects that can be selected to
be loaded, loaded and cached, or not loaded at all for each schema.  The Alias 
Properties dialog is displayed below:

<P ALIGN="CENTER"><IMG SRC="images/alias_properties_dialog.png" BORDER="0"
	ALT="Alias Properties Dialog"></P>

The <EM>Connect database to refresh Schema table</EM> button will load all 
schemas from the database into the table for customization.

<BR CLEAR="LEFT">

<A NAME="connecting">
<H3>Connecting</H3>
</A>

<P>The new alias should now appear in the <EM>Connect To</EM>
dropdown. Select it in the dropdown and enter your user name and
password in the connection dialog, press <EM>OK</EM> and you should be
connected.</P>

<A NAME="sessionwindow">
<H2>Session Window</H2>
</A>

<P>When you first connect to a database a Session window will be
shown.
<P ALIGN="CENTER"><IMG SRC="images/session_1.png" BORDER="0"
	ALT="Session Window"></P>

<P>The Object Tree on the left shows the structure of the database.
Clicking on various nodes within this object tree will show further
information in the right hand detail panel. In this example the database
metadata is shown. Clicking on the title of a column will sort the
display by the data in that column. This is true of all tabular displays
in SQuirreL.</P>

<P ALIGN="CENTER"><IMG SRC="images/session_2.png" BORDER="0"
	ALT="Session Window Showing a Table"></P>

<P>This shows the data displayed when a table is selected in the
Object Tree.</P>

<A NAME="executing">
<H2>Executing SQL</H2>
</A>

<P>SQL can be executed from the SQL tab in the window that opens
once you have connected to an alias. Multiple statements can be executed
and the results will be displayed in multiple tabs below the SQL entry
area.</P>

<P>When the SQL tab is selected pressing <TT>&lt;ctrl&gt;&lt;enter&gt;</TT>,
taking the Execute SQL option from the Session menu or pressing the
Execute SQL button in the session window tool bar will execute the
entered SQL.</P>

<P>If a single statement is entered then pressing <TT>&lt;ctrl&gt;&lt;enter&gt;</TT>
will execute just that statement.</P>

<P>If you only want to execute part of the SQL entered then
highlight the SQL that you want to execute and press <TT>&lt;ctrl&gt;&lt;enter&gt;</TT>.</P>

<P>To only execute a single statement amongst several statements
(separated from the other statements by at least one blank line) within
the SQL entry area then click on the line containing the statement that
you want to execute and press <TT>&lt;ctrl&gt;&lt;enter&gt;</TT>.</P>

<P>The characters -- at the beginning of a line will turn it into a
comment.</P>

<P ALIGN="CENTER"><IMG SRC="images/sql_1.png" BORDER="0"
	ALT="Executing SQL"></P>

<P>As can be seen in the above screen shot, double clicking in a
cell in the query results will open up a new window showing the entire
contents of the cell.</P>

<P>Plugins can add many functions to the SQL editor. The
tools popup shows all of these functions and allows the user to execute them. 
The functions in the popup may be filtered by typing the name of the filter
into the filter text field. The tools popup can be opened by pressing
&lt;Ctrl&gt;-t.  A picture of the tools popup dialog is show below.</P>

<P ALIGN="CENTER"><IMG SRC="images/toolspopup.jpg" BORDER="0"
	ALT="Tools popup"></P>



<P>The <IMG SRC="images/createresultwindow.gif" BORDER="0"
	ALIGN="CENTER" ALT="Tearoff icon"> icon on the tabbed folder
containing the SQL results allow you to &quot;tear off&quot; the query
results from the tabbed folder and display it in its own window.</P>

<P ALIGN="CENTER"><IMG SRC="images/sql_2.png" BORDER="0"
	ALT="&quot;Torn off&quot; query results"></P>

<A NAME="executing">
<H2>SQL History</H2>
</A>

<P>Every SQL statement that is successfully executed is also added to the 
drop-down history list, which is shown below.</P>  

<P ALIGN="CENTER"><IMG SRC="images/sql_history_list.png" BORDER="0"
	ALT="&quot;Torn off&quot; query results"></P>

<P>This list can then be used to find and re-execute 
previously executed statements.  The drop-down list allows you to pick the SQL
statement, and clicking the 
blue arrow ( <img src="images/history_arrow.png" align="middle"> )
will copy the statement into the editor.
Additionally, the history list can be searched
using the SQL History dialog which is accessed by the icon 
( <img src="images/history_dialog_icon.png" align="middle"> ) which is next to the blue 
arrow.  The SQL History window is shown below.</P>

<P ALIGN="CENTER"><IMG SRC="images/sql_history_dialog.png" BORDER="0"
	ALT="&quot;Torn off&quot; query results"></P>


<P><A NAME="editing_sql">
<h3>Editing Data in the SQL Results Tables</h3>
</A>
<P>The data displayed within the SQL Results may be edited in the
same manner as the data within the <A href="#ContentsTab">Contents
Tab</A>. You should read that section to understand the capabilities and
limitations of data editing, including the use of the Popup window to
import and export data. In addition, there are two things that you need
to know about editing in the SQL Results:</P>
<DL>
	<LI>To enable editing in the SQL Results tables, you must set the
	"SQL Results" entry in the Session Properties to "Editable Table".</LI>
	<LI>Editing is only allowed when the SQL that was executed
	consists of: 
	<PRE>
	"SELECT <column list> FROM <single_table_name>"
    or
	"SELECT <column list> FROM <single_table_name> WHERE ..."
    </PRE> 
    In addition, the name of the table must be unique within the entire DB.
	This means that if you have multiple catalogs or schemas which have
	that same table name defined in them, Squirrel cannot determine which
	to use and thus will not allow data to be updated in the DB. (Squirrel
	is just a bit stupid on this point: it will let you edit the data, and
	then tell you that it cannot update the DB when you exit the cell being
	changed.)</LI>
</DL>
<P><A NAME="ContentsTab">
<h2>The Contents Tab and Editing Data</h2>
</A>
<P>SQuirreL allows you to easily view and change the data in a
single table. Data may be changed just by typing the new values when you
are viewing the table in the Contents tab under the Objects view. The
data may also be viewed and edited in a larger popup window, which has
more capabilities, by double-clicking on the cell. There are some small
differences between the in-cell editing and editing in the Popup, so be
sure to read the <A HREF="#UsingPopup">Using the Popup Window</A>
information.
<P><A NAME="ViewingDataInContentsTab">
<h3>Viewing Data in the Contents Tab</h3>
</A> After connecting to a database, you may view the data in a single table
by using the Contents Tab.
<P>To get to the contents tab, first select the Objects view. Next,
look under the tree in the window on the left. The exact organization of
this window is different for each DBMS, so you may have to do a bit of
exploring. What you are looking for is a list of table names, and they
are usually found under a heading labeled "TABLE" or "TABLES". The
"TABLE" heading may itself be under another heading, such as the name of
the database instance. When you find the list of table names, click on
the name of the table that you wish to view, and then in the window on
the right click on the tab labeled "Contents".
<P>The data in the table will be displayed in rows and columns based
on the format selected (see <a href="#Setting_the_Editing_Mode">Setting
the Format and Editing Mode</a>).
<P>The column ordering is the order of the rows in the table
definition. That order may be changed by drag-and-drop, which means
clicking on the column header and holding the mouse button down while
dragging the column horizontally to another location. Columns are
initially displayed with a moderate width so that you can see a
reasonable amount of data in as many columns as possible within the
limited window space. You may increase or decrease a column's width by
click-and-hold on the space between two columns, then moving the mouse
left or right to change the column widths.
<P>The rows are initally unordered. However, after retrieving the
data, you may sort the rows based on the values in a column by
single-clicking on a column header. That will sort the rows into an
order with the values in the selected columns starting with the
"smallest" value. Clicking on the same column header again will reverse
the order ("largest" first). You can limit the number of rows retrieved
(see the Session Properties, Object Tree).
<P>There are a few special cases for how data is displayed.
<UL>
	<LI>If a cell contains Newlines (which is possible in the various
	VARCHAR and CLOB data types), the cell background is colored Cyan and
	the Newline characters are explicitly shown as "\n" (unless changed in
	the <A HREF="#data_type_controls">Data Type Controls</A>). If the table
	is editable, the Cyan background means that the cell contents cannot be
	edited ina the cell as displayed in the table, but can be edited using
	the Popup window (see <a href="#UsingPopup">Using the Popup Window</a>).
	</LI>
	<LI>BLOB (Binary Large OBject) and CLOB (Character Large Object)
	fields are initially displayed as "&lt;Blob&gt;" and "&lt;Clob&gt;"
	respecively. This is done for performance reasons, since those data
	types are often quite large. When you select the Blob or Clob field,
	the entire data is read in and displayed in the cell.<BR>
	Alternatively, you may use the Session Properties -> Format screen to
	limit the amount of the Blob/Clob data read and displayed when the
	Contents Tab is first displayed, in which case the number of characters
	you have selected will be displayed in each Blob or Clob cell. This may
	be necessary when the Blob or Clob contains data needed to identify
	specific rows in the table. When there is more Blob/Clob data for a
	cell than is displayed in that cell, an elipsis ("...") is added to the
	end of the displayed data so you know that the data has been truncated
	for display. As before, when you select the cell, the whole Blob or
	Clob will be read and displayed.</LI>
</UL>

<P>One word of warning. Some DBMSs that claim to have BLOB and CLOB
data types actually implement those types using BINARY, VARCHAR, or
other types of fields. In those cases, the cells will act as they would
for the BINARY, VARCHAR, etc., data types, and not as described above
for the BLOB/CLOB types. (There is a functional difference in that
"real" BLOB/CLOB types return a "locator" or "reference" object rather
than the actual data. Using the locator allows SQuirreL to defer reading
the actual data until you need it rather than reading it all during the
initial display of the Contents Tab.) To see if your DBMS uses real
BLOB/CLOB types, go to the Objects view, then select the top element in
the tree in the left window and "Data Types" in the right window. In the
column labeled "DATA_TYPE", real BLOBs will have the value 2004 and real
CLOBs will show 2005. If your DBMS does not have 2004 and 2005 listed
under the "DATA_TYPE" field, then it does not support the BLOB/CLOB
functionality provided by SQuirreL. As an example, the MySQL DBMS claims
to support BLOBS, but in the "Data Types" table it shows that the
"TYPE_NAME" of "BLOB" is actually using the "DATA_TYPE" of "-4
[LONGVARBINARY]", so a "BLOB" field in MySQL will be treated by SQuirreL
as a LONGVARBINARY and not as a "BLOB".</P>

<A NAME="enablingediting">
<h3>Enabling Editing</h3>
</A>

<P>When SQuirreL is initially set up, the Contents Tab will be set
in a read-only mode. This is a safety precaution. Once a table is made
editable, changing the contents of a cell causes the database to be
immediately updated. While extremely convenient, this is dangerous. With
this capability enabled, it becomes very easy to accidentally destroy
data, violate some consistancy checks, mis-direct references between
tables, etc. On the other hand, the author of this feature runs with
editing always enabled. It is simpler that way, but has the potential
for disaster. <b>You have been warned!</b></P>

<P>You can set SQuirreL so that tables are editable all the time, or
you can enable editing on a specific table as you are working on it.
Either option may be set as your default mode of operation, and either
option may be selected for use on a specific table.</P>

<P>Editing may only be done in Contents tab in the Object view, not
on the results of manually entered SQL queries run under the SQL view.</P>

<a name="Setting_the_Editing_Mode">
<h4>Setting the Format and Editing Mode</h4>
</a>

<P>To set the default format and edting mode for the Contents Tab
for new sessions take the <em>New Session Properties</em> option from
the <em>File</em> and click on the <EM>General</EM> tab. The <b>Table
Contents</b> dropdown list gives the following options:</P>

<dl>
	<dt>Table</dt>
	<dd>The data in the Contents tab is a read-only table. You may
	click in any cell or tab through the table and any accidental typing
	you do will be ignored and not change the database. To enable editing
	on this table, click on the right mouse button and select the <b>Make
	Editable</b> option. This makes that table <i>and only that table</i>
	editable.</dd>
</dl>

<dl>
	<dt>Text</dt>
	<dd>The data in the Contents tab is shown as simple formatted text
	and is read-only. To enable editing on this table, ;click on the right
	mouse button and select the <b>Make Editable</b> option. This makes the
	table <i>and only that table</i> editable</dd>
</dl>

<dl>
	<dt>Editable Table</dt>
	<dd>The data in the Contents tab is an editable table. Changes
	made to the data in this view are made to the database.</dd>
</dl>

<P>After you have connected with a database, you may change the
format or editing mode for the data in the Contents tab by the <em>Session
Properties</em> option from the <em>Session</em> and clicking on the <EM>General</EM>
tab and changing the selection for <em>Table Contents</em>.</P>

Note that the individual data items may be displayed in different
formats as described in
<A HREF="#data_type_controls">"Data Type Controls"</A>
.

<A name="howtoedit">
<h3>How To Edit</h3>
</A>

<P>Here is how to edit data in the table:</P>

<ol>
	<li>Connect to the database.</li>

	<li>Select a table in the object tree and select the <EM>Contents</EM>
	tab to view the data.</li>

	<li>Make sure the table is editable. See <a
		href="#Setting_the_Editing_Mode">Setting the Format and Editing
	Mode</a> above.</li>

	<li>Select the cell that you want to edit. This may be done either
	by using the keyboard (tab and enter keys) to move around the table to
	reach the cell, or you may click on the cell with the mouse. Note that
	if a cell cannot be edited (see <a href="#Limitations">Limitations</a>)
	you may select the cell, but you will not be allowed to edit the data.</li>
	When a cell is being edited, its background will change to Yellow to
	let you know that you may be changing the contents of the database.
	Cells with a Cyan background may be edited only by using the Popup
	window (see
	<a href="#UsingPopup">Using the Popup Window</a>
	).

	<li>If you select the cell using the mouse, the background
	immediately turns Yellow and the cursor is set to the place where you
	clicked in the cell. If you select the cell by using the tab or enter
	keys, the background remains white until you type the first character
	to be added (or use the delete key). That character is added to (or
	deleted from) the end of the text displayed in the cell, and the cell
	background changes to Yellow.
	<li>Change the data in the cell to look the way that you want it
	to. Editing is done in the usual way by typing characters, using delete
	to erase, and using the mouse to select a point to insert or characters
	to delete. There are a couple of specialized features that are
	described later in this section.</li>

	<li>When the data in the cell looks the way you want, leave the
	cell by pressing the tab key, the enter key, or clicking on another
	cell with the mouse. This causes the data in that cell to be updated in
	the DB.</li>

</ol>

<P>If the data in the cell gets really messed up and you are
confused about what is going on, press the &lt;delete&gt; key until the
original data appears (see below). If that doesn't work then immediately
close the database connection without leaving the cell (&lt;ctrl&gt;W or
click the close button). This will abort the operation and avoid
changing the DB.</P>

<P>If the cell contains a NULL value, that is shown as the string
"&lt;null&gt;". To change that to a non-null value, just type the new
data. When you enter the first character of the data, the "&lt;null&gt;"
will be replaced by that character.<BR>
NOTE: This means that SQuirreL will not allow you to enter a string with
the value "&lt;null&gt;" into a nullable column, since that string will
be interpreted by SQuirreL to be the null value. Also, if you have a
field in the database containing the string "&lt;null&gt;", do not edit
that field using SQuirreL since the value will be replaced by the null
value.</P>

<P>To change the value of a nullable cell to NULL, just delete all
of the data in that cell. When you delete all of the data in a cell, the
contents of the cell will be set to "&lt;null&gt;". Since the VARCHAR
data types allow a non-null empty string, for those cells you must
delete all of the data so that the cell is blank, and then press delete.
The VARCHAR cell will then be set to &lt;null&gt;.</P>

<P>If a cell is not nullable, deleting the last character in the
cell will leave the cell blank. You may then enter new data for the
cell.</P>

<P>To restore the cell to its original value, delete all of the data
in the cell, then press the delete key one more time. This will cause
the cell to be reset to its original value. For cells that allow nulls,
continually pressing the delete key causes a cycle:</P>

<P>&nbsp;&nbsp;&nbsp; original data -&gt;&nbsp; delete data -&gt;
&nbsp;&lt;null&gt; -&gt; original data</P>

<P>and for cells that do not allow nulls:</P>

<P>&nbsp;&nbsp;&nbsp; original data -&gt; delete data -&gt; blank
cell -&gt; original data</P>

<P>Thus, if you mess up the contents of a cell, repeatedly press the
delete key until you see the original data reappear.</P>

<P>When leaving the cell, if the cell data is identical to the
original contents of the cell, the DB will not be updated.</P>


<h3><a name="insert_delete"></a>Inserting and Deleting Rows</h3>
You may easily insert or delete rows in the table using the Contents Tab
For both operations the table must be editable (see
<A href="#enablingediting">Enabling Editing</A>
)
<P>To insert a row into the table, click the right mouse button, and
choose the "Insert row" option from the menu This brings up a separate
window showing the columns of the table with two rows The first row
contains the data to be filled i with default values as defined for the
table's column already filled in The second row shows information about
the field including the type of data, the field length (if known), and
so forth You should edit the values in the first row in the same way
that you would if that row already existed in the table When the data in
the row is the way you want it, click the "OK" button to have the row
entered into the table
<P>If there are no rows in the table when you open the Contents Tab
clicking the right mouse button brings up a menu with only the "Insert
Row option You may use this in the normal manner to enter the first row
in the table
<P>To delete one or more rows from the table select the rows to be
deleted, then click the right mouse button an choose the "Delete Rows"
option from the menu
<P>
<h3><a name="UsingPopup"></a>Using the Popup Window</h3>
<h4><a name="EditingInPopup"></a>Editing within the Popup</h4>

<P>When you double-click in a cell, a Popup window is displayed. For
simple data (e.g. integers, floats, or simple strings) you will be able
to edit the data directly in the cell, but there are some times when you
will need to use the Popup:
<ul>

	<li>when the data is too long to comfortably work with in the
	space provided by the cell</li>

	<li>when the data contains newlines or tabs (which are used as
	control characters by the in-cell editor and are not displayed
	correctly there)</li>

	<li>when the data must be represented in a complex way, such as
	needing multiple lines (e.g. an Array type)</li>

	<li>when the data is potentially so large or complex that loading
	it into the table cells in a printable form might significantly delay
	the display of the table. In this case, the cell may display just the
	name of the data type, something like "&lt;Blob&gt;", while the Popup
	window would show the actual contents of that field.</li>

</ul>
For these reasons the data may not be editable in the cell but still be
editable in the Popup. If the data is not editable in the cell (i.e. the
background does not change color when you click on it), you will need to
bring up the Popup window to know whether the data can be edited there.


<P>To use the Popup, double-click in the cell to start the Popup,
then edit the text in the text window. Editing uses the same mechanism
as the in-cell editing where repeatedly typeing the backspace key
eventually restores the original data in the window. One difference from
the in-cell editing is that, depending on the data type being displayed,
you may enter newline and tab characters into strings when in the Popup.
When you are done editing, click on the "Update DB" button to put the
changed data into the Database. The "Cancel" button closes the Popup
without changing the Database.
<P>For Binary data types, the data may be changed from the default
Hex representation into Decimal, Octal or Binary formats. You may also
choose to view bytes of data that correspond to printable ASCII
characters as the character rather than in their numeric form. This may
be useful if the file contains strings, in which case you could see
"ContentsTab.java" instead of "43 6f 6e 74 65 6e 74 73 54 61 62 2e 6a 61
76 61".
<P>The Popup window provides line-wrap and word-wrap functions.
These are accessed in the menu brought up by right-clicking in the text
area. Both of these options are toggle-switches that flip from on to off
or off to on each time you click on them. The word-wrap function
operates only when the line-wrap function is on.
<h4><a name="ImportExport"></a>Import, Export and Editing with an
External Command</h4>

<P>The Popup window also allows you to import data into a cell,
export data from the cell to a file, and operate on the data using an
external command.
<P>
<DL>
	<DT><B>Importing data into a cell:</B>
	<DD>Enter the name of the file containing the data in the "File:"
	field, then click on "Import".
	<DT><B>Exporting data from the cell into a file:</B>
	<DD>Enter the name of the target file in the "File:" field, then
	click on "Export". Note that the default value of the "File:" field is
	"&lt;Temp File&gt;", and if you do not change that entry the system
	will put the data into a new temp file and tell you the name of that
	file after it has been written.
	<DT><B>Operating on the data with an External Command:</B>
	<DD>This function provides a single-click operation to export the
	data to a file, operate on that file with an external process (e.g. MS
	Word, VI, various graphical editors, etc.), then read the result back
	from the file when editing is completed. To do this you must:
	<DL>
		<LI>Enter a file name in the "File:" field or leave it set to
		"&lt;Temp File&gt;". If you leave it set to "&lt;Temp File&gt;", a
		temporary file will be created for you. If you enter your own file
		name, be warned that the file will be deleted after the data is read
		back when editing is completed.
		<LI>Enter a command in the "Command:" field. This field is a
		Combo box where the drop-down list contains all of the commands you
		have used for editing other fields, so you can just choose one of
		them. The command will typically need the name of the file to edit.
		This may be done by using "%f" where you want the name of the file to
		go in that command, so, for example, instead of typing: 
		<PRE>
	        xterm -e vi myfilename
        </PRE> 
        you could type 
        <PRE>
	        xterm -e vi %f
        </PRE> 
        which makes the command more general and avoids the need for you to
		edit the command for each file.
		<LI>Click on "Execute". This causes the cell data to be exported
		to the selected file and the command to be executed. When the external
		process exits, SQuirreL imports the data from that same file back into
		the popup and deletes the file. IMPORTANT: SQuirreL does NOT
		automatically update the database with this data. To put the edited
		data into the database, click on the "Update DB" button.
	</DL>

	<P>Note: SQuirrel does not provide a window for the command to
	operate in, so you may need to provide for that as part of the command.
	For example, to run VI on Linux you may need to enter the command:
	<PRE>
	    xterm -e vi %f
    </PRE> 
    to have VI run in a window visible to you. If you just enter "vi %f" as
	the command, you will not get a window to operate in. Other commands
	(e.g. gimp) provide their own windows, so the extra step will not be
	necessary for them.
</DL>

<P>In all of the above cases, the entries you make in the "File:"
and "Command" fields will be associated with that column so that you do
not need to re-type them the next time that you edit that field. You
may, of course, change those values at any time.
<P>Also, if you just want to set the default values for a particular
column, you can enter the "File:" and "Command:" field information and
click on "Apply".

<h3><a name="Limitations"></a>Limitations</h3>

<P>Some DBMSs implement "standard" data types in non-standard ways
For example, we know that many DBMSs claim to implement the BLOB data
type but they actually store that data using a BINARY or LONGVARBINARY
field SQuirreL uses the <I>actual</I> data type as defined in the
DATA_TYPE field in the Columns tab for the table, not the TYPE_NAME Thus
it is possible that you may think you are working with one type of data
but actually using something else so controls and limitations on
specific data type (e.g. limiting the data read when loading the
Contents tab may not work as expected.
<P>SQuirreL allows editing only on cells that are defined using the
basic standard SQL data type (see <a href="#data_types">Data Types</a>)
If your DBMS provides other data types, you can create a plug-in that
supports the (see the file
net/sourceforge/squirrel_sql/fw/datasetviewer/cellcomponent/CellComponentFactory
for more information)</P>

<P>Some attempt has been made to validate user input for each of the
types. For example, INTEGER fields allow only digits and '-' as input.
However, not all of the necessary information is supplied by all DBMSs,
so we cannot do a complete validation of user input in all cases. For
example, we cannot check that a value entered for a SMALLINT field will
fit into a SMALLINT column in a specific DBMS. Also, the drivers for
each DBMS provide different amounts of information for the same field
type in different situation, and SQuirreL cannot validate the input when
such data is missing The "validation of last resort" is done when we try
to do an update on the DB. The DBMS either succeeds or it fails, and if
there is an error we display that message to the user with the
information that the DB has not been updated.</P>

<P>VARCHAR fields containing tabs or newlines may only be edited in
the Popup window Fields that can only be edited in the Popup are
displayed with a cyan background
<P>VARCHAR fields that may be set to null cannot be set to the
string value "&lt;null&gt; " (without the quotes). VARCHAR fields in the
database may include that value as long as you do not try to edit them</P>
Tables with a large number of columns or with a column containing a very
long value (not includeing BLOB/CLOB data types) may get an error when
trying to update the DB because the WHERE clause is too long. In this
case you should open the table in a session, go to the
<B>Session</B>
menu in the main window, and select the entry "Limit cell edit WHERE
clause size" That tool lets you specify which columns SQuirrel should
use in the WHERE clause when doing the requested update on the cell
contents See
<a href=#session_menu>Session Menu</a>
.

<A NAME="summary_of_how_it_works">
<h3>Summary of How it works (and why you may care)</h3>
</A>

<P>The DB updates are based on the assumption that the list of DB
column names and their values for the current row are unique, or if they
are not unique, that all of the rows with those values are to be updated
in the DB. For example, if you have a database with columns a, b, and c,
and in a particular row you have the values</P>

<PRE>
&nbsp;&nbsp;&nbsp; a=34 &nbsp;b='your name' &nbsp;c=55
</PRE>

<P>and you change column c to be 66, then SQuirreL does the
following:</P>

<ol>
	<li>Query the DB for how many rows contain a=34, b='your name',
	and c=55. If there are more than one, then the update will affect all
	of those rows, so SQuirreL asks if you want to do that before
	continuing.</li>

	<li>Query the DB for how many rows contain a=34, b='your name' and
	c=66. If there are any existing rows with those values, changing the
	current row to c=66 will make the current row identical to the existing
	row(s), so SQuirreL asks if you want to do that before continuing.</li>

	<li>Create and execute the following:</li>
</ol>

<PRE>
update &lt;table&gt; set c=66 where
&nbsp;&nbsp;&nbsp;&nbsp;a=34 and b='your name' and c=55
</PRE>

<P>To help distinguish rows that are similar to each other, any DBMS
that provides a pseudo-column to uniquely identify each row (such as
Oracle's ROWID) has that pseudo-column included in all querys.</P>

<P>The problem with this is that some columns cannot be
differentiated in this way, most notably BLOBs and CLOBs. Thus, if your
table contains BLOB or CLOB columns, SQuirreL may think that rows are
identical because all of the non-BLOB/CLOB fields are identical, but the
rows are actually not the same because the contents of the BLOB/CLOB
fields differ. This could lead to "erroneous" warning messages.</P>

<A NAME="quirks">
<h3>Quirks, Oddities and Known Bugs and work-arounds</h3>
</A>

<ul>

	<li>After error or warning messages, the focus is lost. You will
	need to click on a cell in order to continue editing.</li>

	<li>When using the enter key to leave a cell, you must press it
	two times. The first time causes the data to be updated in the DB, but
	leaves you back in the same cell. Pressing enter again moves to the
	cell below the current one.<br>
	</li>

</ul>

<A NAME="printing">
<H2>Printing</H2>
</A>
<P>Any data that is displayed in a Table may be printed. This
includes all of the meta-data tables displayed in the Object View as
well as the Contents Tab and SQL Results tables. To print, first make
sure that the Session Properties for the type of information (Meta Data,
Table Contents, or SQL Results) has been set to either "Table" or
"Editable Table". Then, with the cursor over the table to be printed,
click on the right mouse button and click on "Print". This will bring up
a dialog box in which you can adjust the parameters of the print job.
When you tell the dialog to print, the selected table will be printed.
<P>Tables that are too wide or too long to fit onto one page will be
printed across multiple pages that can be pieced together to show the
entire table.
<P>If the Session Properties for "Table Contents" or "SQL Results"
have been set to "Text", then the data within the Contents Tab or SQL
Results tables (respectively) may be copied and pasted into a separate
window for printing. <A NAME="data_types">
<H2>Data Types</H2>
</A>
<P>This is a quick description of how SQuirreL handles various data
types when displaying the results of SQL statements. SQuirreL uses the
column type (ResultSetMetaData.getColumnType(...)) from the metadata for
the result set to determine how to display the column.</P>

<DL>
	<DT><B>java.sql.Types.NULL</B>
	<DD><EM>&lt;Null&gt;</EM> is displayed.
	<DT><B>java.sql.Types.BOOLEAN and java.sql.Types.BIT</B>
	<DD>If the retrieved column data is a <EM>java.lang.Boolean</EM>
	object then the appropriate <EM>true/false</EM> is displayed. If the
	retrieved column is a <EM>java.lang.Number</EM> then a non-zero value
	will display <EM>true</EM> while a zero value will display <EM>false</EM>.
	Otherwise the column data is converted to a string and if this string
	equals (ignoring case) &quot;true&quot; then <EM>true</EM> is displayed
	else <EM>false</EM>.
	<DT><B>java.sql.Types.TIME</B>
	<DD>A <EM>java.sql.Time</EM> object is retrieved from the result
	set and displayed in <EM>hh:mm:ss</EM> format.
	<DT><B>java.sql.Types.DATE</B>
	<DD>A <EM>java.sql.Date</EM> object is retrieved from the result
	set and displayed in <EM>yyyy-mm-dd</EM> format.
	<DT><B>java.sql.Types.TIMESTAMP</B>
	<DD>A <EM>java.sql.TimeStamp</EM> object is retrieved from the
	result set and displayed in <EM>yyyy-mm-dd hh:mm:ss.fffffffff</EM>
	format. WARNING: When updating any column in a row containing TIMESTAMP
	fields, the MySQL DBMS will automatically set the first TIMESTAMP field
	in the row to the current time. This is a "feature" of MySQL, and not a
	bug in SQuirreL.
	<DT><B>java.sql.Types.BIGINT</B>
	<DD>If the retrieved column type is a <EM>java.lang.Long</EM> or a
	<EM>java.lang.Number</EM> then it is stored as a <EM>java.lang.Long</EM>
	and displayed as a base ten signed long. Otherwise the column data is
	converted to a string which is then parsed as a base ten signed long.
	<DT><B>java.sql.Types.DOUBLE, java.sql.Types.FLOAT,
	java.sql.Types.REAL</B>
	<DD>If the retrieved column type is a <EM>java.lang.Double</EM> or
	a <EM>java.lang.Number</EM> then it is stored as a <EM>java.lang.Double</EM>
	and displayed as a string representation of the double. Otherwise the
	column data is converted to a string which is then parsed as a double.

	
	<DT><B>java.sql.Types.DECIMAL, java.sql.Types.NUMERIC</B>
	<DD>If the retrieved column type is a <EM>java.math.BigDecimal</EM>
	or a <EM>java.lang.Number</EM> then it is stored as a <EM>java.math.BigDecimal</EM>
	and displayed as a string representation of the <EM>BigDecimal</EM>.
	Otherwise the column data is converted to a string which is then parsed
	as a <EM>BigDecimal</EM>.
	<DT><B>java.sql.Types.INTEGER, java.sql.Types.SMALLINT,
	java.sql.Types.TINYINT</B>
	<DD>If the retrieved column type is a <EM>java.lang.Integer</EM>
	then it is stored as a <EM>java.lang.Integer</EM> and displayed as a
	string representation of the <EM>Integer</EM>. Otherwise the column
	data is converted to a string which is then parsed as a <EM>Integer</EM>.

	
	<DT><B>java.sql.Types.CHAR, java.sql.Types.VARCHAR,
	java.sql.Types.LONGVARCHAR</B>
	<DD>The column data is displayed as a string. Note that if the
	data includes a newline character, that particular data item cannot be
	edited in the cell within the table, but if you double-click on the
	cell to get the Popup window, you will be able to edit the data there.

	
	<DT><B>java.sql.Types.BINARY, java.sql.Types.VARBINARY,
	java.sql.Types.LONGVARBINARY</B>
	<DD>In the SQL tab the column data is displayed as a string. The
	ContentsTab in the Object view displays each byte using Hex format. In
	the Popup editing window, you may choose to display these in Hex,
	Decimal, Octal, or Binary, and you may choose to display values
	representing printable ASCII characters as those characters (e.g. to
	see strings embedded in the binary object).
	<DT><B>java.sql.Types.BLOB</B>
	<DD>If the <A HREF="#data_type_controls">Global Preferences,
	Data Type Controls</A> says to retrieve blobs then the column data is
	displayed as bytes. Note that the <A HREF="#data_type_controls">Global
	Preferences, Data Type Controls</A> can specify the number of bytes of the
	blob to read in during the initial setup of the ContentsTab table. If
	you do not specify a limit, the default operation is to not read in any
	data and to display "<Blob>" in the column. Clicking on an
	individual cell causes the entire BLOB data to be read and displayed at
	that time. Note: BLOB fields may be very large, and this can cause the
	Popup window to take some time to start up (e.g. 30 sec. for a BLOB
	containing a relatively small sized photo).
	<DT><B>java.sql.Types.CLOB</B>
	<DD>If the <A HREF="#data_type_controls">Global Preferences,
	Data Type Controls</A> says to retrieve clobs then the column data is
	displayed as a string. Note that the <A HREF="#data_type_controls">Global
	Preferences, Data Type Controls</A> can specify the number of characters of
	the clob to read in during the initial setup of the ContentsTab table.
	If you do not specify a limit, the default operation is to not read in
	any data and to display "<Clob>" in the column. Clicking on an
	individual cell causes the entire CLOB data to be read and displayed at
	that time.
	<DT><B>java.sql.Types.OTHER</B>
	<DD>If the <A HREF="#data_type_controls">Global Preferences,
	Data Type Controls</A> says to retrieve columns of this type then the
	column data is displayed as a string.
	<DT><B>Any other type</B>
	<DD>If the <A HREF="#data_type_controls">Global Preferences,
	Data Type Controls</A> says to retrieve all other data types then the
	column data is displayed as a string.
</DL>
<P>The JDBC specification (in file java.sql.Types) defines several
codes whose semantics are not understood by SQuirreL: JAVA_OBJECT,
DISTINCT, STRUCT, ARRAY, REF, and DATALINK. These are all handled as
"Any other type" as described above.
<P><A NAME="global_prefs">
<H2>Global Preferences</H2>
</A>
<P>Global Preferences specify configuration settings for the
application.</P>

The descriptions included here are for the tabs created by the core
product. Plugins may add other tabs to this window. See the
Plugin-specific help for descriptions of the tabs added by that plugin.

<H3>General Tab</H3>

<P ALIGN="CENTER"><IMG SRC="images/global_general.png" BORDER="0"
	ALT="General tab"></P>

<H4>General Tab (Appearance)</H4>

<P><B>Show Window Contents While Dragging</B> - If checked this
shows the contents of windows as they are being dragged. If unchecked
only the outline of the window will be shown. Uncheck for a speed
improvement on slow machines.</P>

<P><B>Show Tooltips</B> - If checked then tooltips (or hints) will
be shown when the mouse &quot;hovers&quot; over some controls.</P>

<P><B>Use Scrollable Tabbed Panes</B> - If checked will display the
tabs in tabbed folders in a scrollable region rather than wrapping them
when all tabs will not fit within a single run.</P>

<P>
<center>
<table>
	<tr>
		<td width="40%" align="right">
		    <img src="images/stacked_tabs.png" border="0">
		</td>
		<td width="10%"></td>
		<td width="40%" align="left">
			<img src="images/scrollable_tabs.png" border="0">
	    </td>
	</tr>
	<tr>
		<td align="center">Stacked Tabs</td>
		<td></td>
		<td align="center">Scrollable Tabs</td>
	</tr>
</table>
</center>


<P><B>Show Main Window Tool Bar</B> - If checked then the tool bar
will be displayed in the main window.</P>

<P><B>Show Main Window Status Bar</B> - If checked then the status
bar will be displayed in the main window.</P>

<P><B>Show Drivers Tool Bar</B> - If checked then the tool bar will
be displayed in the Aliases Window.</P>

<P><B>Show Aliases Tool Bar</B> - If checked then the tool bar will
be displayed in the Aliases Window.</P>

<P><B>Maximize Session Sheet on Open</B> - If checked then when a
session is opened it will automatically maximize to the whole space
available within the Squirrel window. If not checked, it is opened using
a smaller part of the space.</P>

<P><B>Show Color Icons in Toolbars</B> - If checked then the icons
in the toolbars are shown in color. If not checked, the icons are in
black-and-white.</P>

<H4>General Tab (Logging)</H4>

<P><B>Execution Log File</B> - This (display only) setting tells you
the name (and location) of the logging file for SQuirreL. If the file
name is too long for the label then the full name will be displayed in a
tooltip.</P>
For more information see <A HREF="#logs">Logs</A>.

<P><B>Configuration File</B> - This (display only) setting tells you
the name (and location) of the logging configuration file for SQuirreL.
If the file name is too long for the label then the full name will be
displayed in a tooltip.</P>

For more information see <A HREF="#logs">Logs</A>.
<P>

<H4>SQL Tab</H4>

<P ALIGN="CENTER"><IMG SRC="images/global_sql.png" BORDER="0"
	ALT="SQL tab"></P>

<H4>SQL Tab (General)</H4>

<P><B>Login Timeout</B> - Sets the maximum time in seconds that a
JDBC driver will wait while attempting to connect to the database.</P>

<P><B>Large Scrip Statement Count</B> - By default, a script is
considered large if it has more than 200 SQL statements selected for execution
in the script. When this is set to zero, large script execution support
is disabled. Large script support consists of the following behavior
during execution:
<ul>
	<li>Only one message is written in the message panel at the bottom
	of the session window at the end of running many statements summarizing
	the details of execution (timing, statement type and count, etc).</li>
	<li>The message "SQL Statement x of y &lt;some sql...&gt;" is
	still displayed in the results panel to indicate progress.</li>
	<li>The history bar isn't updated during large script execution.</li>
</ul>
This feature can dramatically improve UI responsiveness when executing
many statements in large scripts (especially those with statement counts
in the thousands).
<P>

<H4>SQL Tab (Debug)</H4>

<P><B>No Debug</B> - If checked then no debugging information is
output from Squirrel.</P>

<P><B>JDBC Debug to Output Stream</B> - If checked tells the JDBC
drivers to write debugging information to the JDBC Debug File. Depending
on the JDBC driver you are using this may generate a lot of output and
significantly slow down SQuirreL.</P>

<P><B>JDBC Debug to Writer</B> - If checked tells the JDBC drivers
to write debugging information to the JDBC Debug File. Depending on the
JDBC driver you are using this may generate a lot of output and
significantly slow down SQuirreL.</P>

<P><B>JDBC Debug File</B> - If JDBC Debug is enabled then this
(display only) setting is the file that the debug information will be
written out to. If the file name is too long for the label then the full
name will be displayed in a tooltip.</P>

<P>The <B>JDBC Debug to Output Stream</B> has been deprecated by
JavaSoft in favour of the <B>JDBC Debug To Writer</B> option. However
some older JDBC drivers may use the <B>Output Stream</B> rather than the
<B>Writer</B>. Other drivers (such as the oracle 8 JDBC driver) may
write different information to the <B>Output Stream</B> than they do to
the <B>Writer</B>.</P>

<H4>SQL Tab (SQL File)</H4>

<P><B>Open in previous direcory</B> When opening files in the SQL
editor, sets the location in the file chooser to be the last directory
that a script file was opened from.</P>

<P><B>Open in specified direcory</B> When opening files in the SQL
editor, sets the location in the file chooser to be the directory that
is specified in the text field.</P>

<H3>Proxy Tab</H3>

<P ALIGN="CENTER"><IMG SRC="images/global_proxy.png" BORDER="0"
	ALT="Proxy tab"></P>

<H4>Proxy Tab (HTTP Proxy)</H4>

<P><B>Use Proxy</B> - If checked then a HTTP proxy server will be
used for connecting to servers.</P>

<P><B>Server</B> - The name (or IP address) of your proxy server.</P>

<P><B>Port</B> - The port number to use on the proxy server.</P>

<P><B>User</B> - The user name to use to log onto the proxy server.</P>

<P><B>Password</B> - The password to use to log onto the proxy
server.</P>

<P><B>No Proxy For</B> - A list of servers (separated by |) that do
not need to be accessed through your proxy server.</P>

<H4>Proxy Tab (SOCKS Proxy)</H4>

<P><B>Use Proxy</B> - If checked then a SOCKS proxy server will be
used for connecting to servers.</P>

<P><B>Server</B> - The name (or IP address) of your proxy server.</P>

<P><B>Port</B> - The port number to use on the proxy server.</P>

<A NAME="data_type_controls">
<H3>Data Type Controls Tab</H3>
</A>
<P>The contents of this tab may change depending on what Plugins you
have loaded. Plugins are allowed to define new Data Types or override
the existing Data Types, and that may add or remove controls from this
window. The following describes the standard Data Type controls with no
changes made by any Plugins.
<P>Even with only the default Data Type Controls defined, there are
still two screens of them to describe.
<P ALIGN="CENTER"><IMG SRC="images/global_data_types_part1.png"
	BORDER="0" ALT="Data Type Controls Tab, part 1"></P>

<H4>BLOB (SQL Type 2004)</H4>

<P><B>Read contents when table is first loaded</B> - If checked then
the actual contents of the BLOB is read when the table is first loaded.
This is usually not recommended because it usually degrades performance.
If this is not checked, then the data will initally display as
"&gt;Blob&lt;" in the table, and the entire contents will be read in and
displayed when you click on that cell.</P>

<P><B>Read</B> - If reading the contents during initial table load,
select whether to read the entire contents or just part of the data. If
only part of the data is read, then the entire contents will be read
when you click on that cell.</P>

<P><B>(number)</B> - When reading part of the data during inital
table load, how many bytes to read.</P>

<H4>CLOB (SQL Type 2005)</H4>

<P><B>Read contents when table is first loaded</B> - If checked then
the actual contents of the CLOB is read when the table is first loaded.
This is usually not recommended because it usually degrades performance.
If this is not checked, then the data will initally display as
"&gt;Clob&lt;" in the table, and the entire contents will be read in and
displayed
<P><B>Read</B> - If reading the contents during initial table load,
select whether to read the entire contents or just part of the data. If
only part of the data is read, then the entire contents will be read
when you click on that cell.</P>

<P><B>(number)</B> - When reading part of the data during inital
table load, how many characters to read.</P>

<P><B>Show newlines as \n within cells</B> - If checked, when the
data contains newlines, the newlines will be displayed as "\n" within
the cell. When unchecked, the newlines are ignored within the cell. The
difference is between seeing:
<PRE>
	first line\nsecond line\nthird line
    and
	first linesecond linethird line
</PRE>
Note that this option does not affect display in the Popup window, where
newlines actually become new lines.
<P>

<H4>CHAR, VARCHAR, LONGVARCHAR (SQL Types 1, 12, -1)</H4>

<P><B>Show newlines as \n within cells</B> - If checked, when the
data contains newlines, the newlines will be displayed as "\n" within
the cell. When unchecked, the newlines are ignored within the cell. The
difference is between seeing:
<PRE>
	first line\nsecond line\nthird line
    and
	first linesecond linethird line
</PRE>
Note that this option does not affect display in the Popup window, where
newlines actually become new lines.
<P>

<P><B>Allow LONGVARCHAR type to be used in WHERE clause</B> - When
checked, the LONGVARCHAR type is used in WHERE clauses just as other
types. When unchecked, columns of type LONGVARCHAR are not used in the
WHERE clause when performing edits in the cell data. This is necessary
because some databases (e.g. Oracle, DB2) do not allow LONGVARCHAR data
types to be used in WHERE clauses and generate odd error messages when
they are seen.
<P>
<P><B>Limit size of strings read during initial table load ... </B>
- When checked, the amount of string data loaded during the initial
table read is limited to a maximum size (see next field). When
unchecked, the amount of data is not limited. (Note: This was originally
built as a performance improvement, but the implementation actually
reads all of the data from the DB in either case and just displays or
does not display all of it, and thus may not make an impact on
performance.) If the inital data read is limited, the entire data
contents will be displayed when the user clicks on the cell.
<P>
<P><B>... to max of</B> - When limiting the size of the data, this
defines how many characters to display.
<P>
<P><B>Limit read only on columns with these names:</B> - When
limiting the size of data during the initial table load, only apply the
limit to columns with the names listed in this box. All other columns
load all of the data. (This was built as a technology demo to show how
Data Type Controls, which are global to all columns of the given SQL
type(s), can be applied selectively to a limited set of columns.)
<P>
<H4>SQL Other (SQL Type 1111)</H4>

<P><B>Read contents when table is first loaded and display as
string</B> - If checked then columns of this SQL Type will be read by
Squirrel and displayed using the toString() function. <BR>
Warning: Since fields of this data type are not known to Squirrel and
have been explicitly defined as NOT being of a normal, known type,
attempting to display them as Strings may result in unintelligable
displays, and may cause exceptions during processing.
<P>
<P ALIGN="CENTER"><IMG SRC="images/global_data_types_part2.png"
	BORDER="0" ALT="Data Type Controls Tab, part 1"></P>

<H4>Unknown DataTypes (non-standard SQL type codes)</H4>

<P><B>Read contents when table is first loaded and display as
string</B> - If checked then columns of this SQL Type will be read by
Squirrel and displayed using the toString() function. <BR>
Warning: Since fields of this data type are not known to Squirrel and
have been explicitly defined as NOT being of a normal, known type,
attempting to display them as Strings may result in unintelligable
displays, and may cause exceptions during processing.
<P>
<H4>Date (SQL Type 91)</H4>

<P><B>Use default format(yyyy-mm-dd)</B> - If checked then dates
will be displayed in the JDBC default format as shown. If unchecked,
then the "locale-dependent" formats are made available.
<P>
<P><B>or locale-dependent format:</B> - When not using the default
format, this allows you to select from one of the other available
formats.
<P>
<P><B>allow inexact format on input</B> - If checked then Squirrel
allows some flexibility when you type a new value for the field.
<P>
<H4>Time (SQL Type 92)</H4>

<P><B>Use default format(hh:mm:ss)</B> - If checked then times will
be displayed in the JDBC default format as shown. If unchecked, then the
"locale-dependent" formats are made available.
<P>
<P><B>or locale-dependent format:</B> - When not using the default
format, this allows you to select from one of the other available
formats.
<P>
<P><B>allow inexact format on input</B> - If checked then Squirrel
allows some flexibility when you type a new value for the field.
<P>
<H4>Timestamp (SQL Type 93)</H4>

<P><B>Use default format(yyyy-mm-dd hh:mm:ss.msec)</B> - If checked
then timestamps will be displayed in the JDBC default format as shown.
If unchecked, then the "locale-dependent" formats are made available.
<P>
<P><B>or locale-dependent format:</B> - When not using the default
format, this allows you to select from one of the other available
formats.
<P>
<P><B>allow inexact format on input</B> - If checked then Squirrel
allows some flexibility when you type a new value for the field.
<P>
<H3>L&amp;F Tab</H3>

<P ALIGN="CENTER"><IMG SRC="images/global_laf.png" BORDER="0"
	ALT="L&F tab"></P>

This tab is installed by the Look and Feel (L&F) plugin which is part of
the "standard" plugin set. If you didn't choose to install the
"standard" plugins then this tab will not appear.

<H4>L&amp;F Tab (General)</H4>

<P><B>Allow L&F to set tilebar and window borders</B> - allows you to 
specify whether the Look and Feel can set these, otherwise the Window Manager 
will set them. This setting only takes effect for newly created windows.</P>


<H4>L&amp;F Tab (Look and Feel)</H4>

<P><B>Look And Feel</B> - allows you to 
specify which L&amp;F family to use. This setting only takes effect for newly 
created windows.</P>

<P><B>Theme</B> - If the selected L&amp;F supports themes, this allows you to 
specify which one to use</P>

<H3>Fonts Tab</H3>

<P ALIGN="CENTER"><IMG SRC="images/global_fonts.png" BORDER="0"
	ALT="Fonts tab"></P>

<H4>Fonts Tab (Fonts)</H4>

<P><B>Menus</B> - If enabled this will override the default font with the 
selected font for menus/menu items in the toolbar and the popup menu.  Pictured
below is the main frame menubar with Ravie 12-point Bold font.

<P ALIGN="CENTER"><IMG SRC="images/fonts_menus_demo.png" BORDER="0"
	ALT="Menus Custom Font"></P>

<P><B>Static Text</B> - If enabled this will override the default font with the
selected font for labels on Tabs and Object Tree Nodes.  The picture below shows
a session window with Ravie 12-point Bold font.

<P ALIGN="CENTER"><IMG SRC="images/fonts_static_text_demo.png" BORDER="0"
	ALT="Static Text Custom Font"></P>

<P><B>Status Bars</B> - If enabled this will override the default font with the
selected font for labels on status bars.  The picture below shows
a session window status bar and the main application status bar with 
Ravie 12-point Bold font.

<P ALIGN="CENTER"><IMG SRC="images/fonts_status_bar_demo.png" BORDER="0"
	ALT="Status Bar Custom Font"></P>

<P><B>Other</B> - If enabled this will override the default font with the
selected font for labels in many places not already covered by the preceding 
settings.  The picture below shows "other" labels with Ravie 12-point Bold font.
<P>

<P ALIGN="CENTER"><IMG SRC="images/fonts_other_demo.png" BORDER="0"
	ALT="Other Custom Font"></P>

The font tab is also installed by the Look and Feel (L&F) plugin which is part of
the "standard" plugin set. If you didn't choose to install the
"standard" plugins then this tab will not appear.


There may be other tabs present in the Global Preferences dialog (plugin-specific)
which are not listed here.  See the plugin documentation for details.  For 
preference tabs installed by plugins, the tab name should match the plugin name.

<A NAME="session_props">
<H2>New Session and Session Properties</H2>
</A>

<P>The &quot;New Session Properties&quot; dialog allows you to
specify settings for future session. To change the settings for existing
sessions use the &quot;Session Properties&quot; menu option. The
descriptions included here are for the tabs created by the core product.
Plugins may add other tabs to this window. See the Plugin-specific help
for descriptions of the tabs added by that plugin.
<H3>General Tab</H3>

<P ALIGN="CENTER"><IMG SRC="images/session_props_general.png"
	BORDER="0" ALT="General tab"></P>

<H4>General Tab (Appearance)</H4>

<P><B>Show Tool Bar</B> - If checked then display a toolbar on the
session window.</P>

<P><B>Main Tabs</B> - Defines where the Main tabs (ie: "Objects" and
"SQL") in the session window go relative to the data being displayed.
This may be set to top, bottom, left or right.</P>

<P><B>Object Tabs</B> - Defines where the tabs in the Object window
(eg: Metadata, Contents, Status, etc.) go relative to the data being
displayed. This may be set to top, bottom, left or right.</P>

<P><B>SQL Execution Tabs</B> - Defines where the tabs for the sets
of results from SQL execution in the SQL window go relative to the data
being displayed. This may be set to top, bottom, left or right.</P>

<P><B>SQL Results Tabs</B> - Defines where the tabs within a single
SQL result window ("Results", "Metadata" and "Info") go relative to the
data being displayed. This may be set to top, bottom, left or right.</P>

<H4>General Tab (Output)</H4>

<P><B>Meta Data</B> - Specify the output type (text, read-only
table, or editable table) for meta data displays.</P>

<P><B>Table Contents</B> - Specify the output type (text, read-only
table, or editable table) for the Contents tab in the Ojbect display.</P>

<P><B>SQL Results</B> - Specify the output type (text, read-only
table, or editable table) for SQL result displays. (Note that there are
additional limits on what can or cannot be edited in the results of SQL
queries, so setting this to "Editable table" may not result in an
editable output for any given query. See <A HREF="#editing_sql">Editing
the SQL Results</A> for details.)</P>

<H3>Object Tree Tab</H3>

<P ALIGN="CENTER"><IMG SRC="images/session_props_objecttree.png"
	BORDER="0" ALT="Object tab"></P>

<H4>Object Tree Tab (Object Tree)</H4>

<P><B>Load Schemas/Catalogs into object tree</B> - If checked then
the global DB information is automatically loaded into the Object Tree
view of the Database. This is useful for navigating the entire Database
contents, but it may cause an unacceptable performance penalty, e.g.
when using Squirrel for remote access through a low-bandwidth
connection.</P>

<P><B>Show Row Count for Tables (can slow application)</B> - If
checked then when a table is opened the number of rows in the table is
included in parentheses after the name of the table in the message bar
at the bottom of the Squirrel windows. If not checked, then the number
is not shown. Showing the number may slow the application. The number is
still available by using the "Row Count" tab in the Object view.
<P>
<P><B>Contents - Limit rows [number] rows</B> - If checked then the
number of rows read from the table is limited to the number in the text
box, which may be adjusted as needed. If not checked, then Squirrel will
attempt to read the entire table.
<P>
<H4>Object Tree Tab (Filters)</H4>

<P><B>Limit Schema Objects using these comma-delimited prefixes:</B>
- Limit the list of objects shown in the Object Tree to only those with
Schema names that start with the entries in this box. If the box is
empty, then no limiting is done and all objects are shown.</P>

<P><B>Limit Catalog Objects using these comma-delimited
prefixes:</B> - Limit the list of objects shown in the Object Tree to only
those with Catalog names that start with the entries in this box. If the
box is empty, then no limiting is done and all objects are shown.</P>

<P><B>Object Filter</B> - Limit the list of objects shown in the Object Tree to only
those with names that match the pattern specified in this box.</P>


<H3>SQL Tab</H3>

<H4>SQL Tab (SQL)</H4>

<P ALIGN="CENTER"><IMG SRC="images/session_props_sql.png" BORDER="0"
	ALT="SQL tab"></P>

<H4>SQL Tab (SQL)</H4>

<P><B>Auto Commit</B> - If checked then all SQL will be
automatically committed after it is executed. If unchecked then you will
be able to use the &quot;Commit&quot; and &quot;Rollback&quot; options
on the &quot;Session&quot; menu.</P>

<P><B>Show SQL Results MetaData (can slow application)</B> - If
checked then the MetaData associated with the results of an SQL query
will be read and made available to the user. This may slow down Squirrel
operation, espcially when being used over low-speed connections. If
unchecked, then the MetaData will not be avilable for the SQL query
results.</P>

<P><B>SQL Results - Limit Rows [number] rows</B> - If <EM>SQL -
Limit rows</EM> is checked then only the number of rows specified in the <EM>rows</EM>
will be displayed for an SQL query.</P>

<P><B>Abort on Error</B> - If checked then when executing multiple
commands in a single sequence, if one of the commands returns an error,
then the sequence is aborted at that point. If not checked, then the SQL
commands following the one with the error are executed anyway.</P>

<P><B>Statement Separator</B> - The character used to separate SQL
statements in the SQL entry area.</P>

<P><B>Start of Line Comment</B> - The character that specifies that
the line in the SQL entry area is a comment and should not be passed to
the database for execution.</P>


<H4>SQL Tab (SQL Entry Area)</H4>

<P><B>Font</B> - The <EM>Font</EM> button allows you to specify the
font to be used in the SQL entry area.</P>

<H4>SQL Tab (SQL History)</H4>

<P><B>Share SQL History</B> - if checked then the SQL history is
shared accross all Sessions. If not, then the history is kept for this
Session only.</P>

<P><B>Limit SQL History Combo Size [number]</B> - if checked then
limit the number of lines of SQL available in the SQL History Combo box
(pull down list above the SQL command entry area) to the (adjustable)
number given.</P>


<A NAME="plugins">
<H2>Plugins</H2>
</A>

<P>A plugin is an application written in Java that runs within
SQuirreL. This allows developers to enhance the functionality of
SQuirreL without having to rebuild the SQuirreL application itself. It
also allows you to &quot;pick and choose&quot; the functionality that
you want in SQuirreL. For instance if you don't use Oracle then you
don't need the Oracle specific functionality supplied by the Oracle
plugin.</P>

<P>All supported plugins are available in the install jar and can be installed 
at the same time when installing SQuirreL, or at any time afterward.  Third-party
plugins can be installed by unpacking the archive file (*.zip, *.gz) into the 
plugins directory within the SQuirreL application directory keeping the
directory structure. To use the plugin you will need to restart
SQuirreL.  The SQuirreL project team no longer makes individual plugins 
available for download.</P>

<P>The &quot;Summary&quot; option on the &quot;Plugins&quot; menu
will display a dialog box showing the plugins currently installed.</P>

<P ALIGN="CENTER"><IMG SRC="images/plugins_1.png" BORDER="0"
	ALT="Plugins Summary"></P>

<A NAME="logs">
<H2>Logs</H2>
</A>

<A NAME="menus">
<H2>Menus</H2>
</A>

<A NAME="file_menu">
<H3>File Menu</H3>
</A>

<DL>
	<DT><B>Global Preferences</B>
	<DD>Displays the <A HREF="#global_prefs">Global Preferences</A>
	dialog.
	<DT><B>New Session Properties</B>
	<DD>Displays the <A HREF="#session_props">New Session
	Properties</A> dialog.
	<DD>
	<DT><B>Dump Application</B>
	<DD>This option will dump some internal structures of the
	application to a text file along with a <A HREF="#dump_session">dump</A>
	of all the currently open sessions. This may be useful for debugging
	problems with SQuirreL.
	<DT><B>Exit</B>
	<DD>Exit the application after closing all sessions.
</DL>

<A NAME="drivers_menu">
<H3>Drivers Menu</H3>
</A>

<DL>
	<DT><B>New Driver</B>
	<DD>Displays a dialog allowing you to specify a new JDBC <A
		HREF="#the_driver">driver</A>.
	<DT><B>Modify Driver</B>
	<DD>Displays a dialog allowing you to modify an existing JDBC <A
		HREF="#the_driver">driver</A>.
	<DT><B>Delete Driver</B>
	<DD>Allows you to delete an existing JDBC <A HREF="#the_driver">driver</A>.

	
	<DT><B>Copy Driver</B>
	<DD>Copies the JDBC <A HREF="#the_driver">driver</A> currently
	selected in the Drivers list and displays it as a new driver in the
	driver maintenance dialog
	<DT><B>Install Default Driver Definitions</B>
	<DD>Copies entries from the default JDBC driver definitions that
	ships with SQuirreL to the Drivers List. If the driver definition is
	already in the list then the default one will not be copied.
</DL>

<A NAME="aliases_menu">
<H3>Aliases Menu</H3>
</A>

<DL>
	<DT><B>Connect</B>
	<DD>Display a connection dialog allowing you to <A
		HREF="#howtoconnect">connect</A> to the specified <A HREF="#the_alias">alias</A>.

	
	<DT><B>New Alias</B>
	<DD>Displays a dialog allowing you to specify a new <A
		HREF="#the_alias">alias</A>.
	<DT><B>Modify Alias</B>
	<DD>Displays a dialog allowing you to modify an existing <A
		HREF="#the_alias">alias</A>.
	<DT><B>Delete Alias</B>
	<DD>Allows you to delete an existing <A HREF="#the_alias">alias</A>.

	
	<DT><B>Copy Alias</B>
	<DD>Copies the <A HREF="#the_alias">alias</A> currently selected
	in the ALiases list and displays it as a new alias in the alias
	maintenance dialog
</DL>


<A NAME="plugins_menu">
<H3>Plugins Menu</H3>
</A>

<DL>
	<DT><B>Summary</B>
	<DD>Displays a dialog showing the installed <A HREF="#plugins">plugins</A>.
	
</DL>

<A NAME="session_menu">
<H3>Session Menu</H3>
</A>

<DL>
	<DT><B>Session Properties</B>
	<DD>This option will display the Session Properties dialog
	allowing you configure your current session. <A HREF="#session_props">More</A>.

	
	<DT><B><A NAME="dump_session">Dump Session</A></B>
	<DD>This option will dump some internal structures of the current
	session to a text file. This may be useful for debugging problems with
	SQuirreL.
	<DT><B>Refresh Tree</B>
	<DD>This option will refresh the object tree.
	<DT><B>Run SQL</B>
	<DD>This option will run the current SQL in the SQL entry area. <A
		HREF="#executing">More</A>.
	<DT><B>Commit</B>
	<DD>This option will commit the current SQL transaction. This is
	only applicable if &quot;Auto Commit&quot; has been turned off in the <A
		HREF="#session_props">Session Properties</A>.
	<DT><B>Rollback</B>
	<DD>This option will rollback the current SQL transaction. This is
	only applicable if &quot;Auto Commit&quot; has been turned off in the <A
		HREF="#session_props">Session Properties</A>.
	<DT><B>Goto Previous Results Tab</B>
	<DD>This option will select the Results Set tab to the left of the
	currently selected one. If the leftmost tab is currently selected then
	the rightmost tab will be selected.
	<DT><B>Goto Next Results Tab</B>
	<DD>This option will select the Results Set tab to the left of the
	currently selected one. If the rightmost tab is currently selected then
	the leftmost tab will be selected.
	<DT><B>Show Native SQL</B>
	<DD>This option will append the native SQL for the current JDBC
	SQL into the SQL entry area. E.G. If you enter the following in an
	Oracle session <pre>select * from table1 where entered_date = {d'2002-12-01'}</pre>

	and take this option then the following will be appended to the SQL
	entry area. <pre>select * from table1 where entered_date = TO_DATE ('2002-12-01', 'YYYY-MM-DD')</pre>
	<DT><B>Reconnect</B>
	<DD>Close the current connection to the database and reopen it
	using the same user name and password.
	<DT><B>Close Session</B>
	<DD>Close the current connection to the database and close the
	session window.
	<DT><B>Close All SQL Result Tabs</B>
	<DD>Close all SQL results displayed in the tabbed folder for the
	current session.
	<DT><B>Close All SQL Result Windows</B>
	<DD>Close all SQL results windows &quot;torn off&quot; from the
	tabbed folder for the current session
	<DT><B>Limit cell edit WHERE clause size</B>
	<DD>This allows you to select specific columns to use as the key
	field when updating the DB after you edit a cell in a table. The
	purpose of thi is to reduce the size of the WHERE clause, which
	normally includes all field in the table. For tables with many columns,
	or with columns containing lon data entries (not includeing BLOB/CLOB
	fields, which are handled differently) the automatically generated
	WHERE clause may exceed the DBMS length limitiation <BR>
	You may move column names between the "use columns" and "not use
	columns" boxe by selecting the names and using the arrow buttons to
	move them to the other box You must leave at least one column in the
	"use columns" box, and the column in the "use columns" box must be
	sufficient to uniquely identify each row in the table, e.g. the primary
	key fields for the table The "Reset" button restores the column name
	lists to the way they were when you opened the window <BR>
	 Remember to click "OK" when you are done
	<BR>
	If you define a set of columns to use in the WHERE clause and then edit
	some other column, SQuirreL will warn you that "1 duplicate row" is
	about to be created. Since you have told SQuirreL to not look at the
	edited column it does no recognize that the new data is different than
	the old data so it gives you a warning. In this case there is no problem
	and you should just tell SQuirreL to go ahead with the update.
</DL>

<A NAME="windows_menu">
<H3>Windows Menu</H3>
</A>

<DL>
	<DT><B>View Aliases</B>
	<DD>Display the list of <A HREF="#the_alias">aliases</A> that
	define a connection to a database.
	<DT><B>View Drivers</B>
	<DD>Display the list of <A HREF="#the_driver">drivers</A>.
	<DT><B>View SQuirreL Logs</B>
	<DD>Display the execution <A HREF="#logs">logs</A> for SQuirreL.
	<DT><B>Tile</B>
	<DD>Tile the open session windows.
	<DT><B>Cascade</B>
	<DD>Cascade the open session windows.
	<DT><B>Maximize</B>
	<DD>Maximize the open session windows.
	<DT><B>Close All Sessions</B>
	<DD>Close all existing sessions.
</DL>


<A NAME="help_menu">
<H3>Help Menu</H3>
</A>

<DL>
	<DT><B>Help</B>
	<DD>Displays this Help File.
	<DT><B>FAQ</B>
	<DD>Displays the Frequently Asked Questions file.
	<DT><B>Change Log</B>
	<DD>Displays the development history of SQuirreL.
	<DT><B>Licence</B>
	<DD>Displays the licence for SQuirreL.
	<DT><B>About</B>
	<DD>Displays the About Box for SQuirrel.
</DL>

</BODY>
</HTML>

